// 1.在自身实例化的时候 就往Dep 的实例中添加自己
// 2.在数据发生变化时,dep通知Watcher调用自身的update方法去更新视图
class Watcher{
    constructor(vm , key , cb){
        this.vm = vm
        this.cb = cb
        this.key = key
        // 把当前watcher实例对象记录到Dep类的静态属性target,以便当前依赖数据的dep实例对象添加观察者
        Dep.target = this
        // 当vm[key]去获取当前依赖的数据时 就触发了当前依赖数据的getter ,随机也就把自身有\添加进入了Dep实例的subs中
        this.oldValue = vm[key]
        Dep.target = null
    }
    //当数据变化时 update方法被dep实例调用 去更新视图
    update(){
        let newValue = this.vm[this.key]
        if( newValue === this.oldValue ){
            return false
        }
        this.cb(newValue)
    }
}